{{tag>entreprise Hardy Maverick}}
----
====== Puppet ======

===== Présentation =====
Puppet est un outils de gestion de la configuration de serveurs, il permet le télédéploiement de configuration sur un ensemble de serveurs en quelques minutes. L’intérêt de cette solution open source réside dans son support multi-plateformes (basé sur ruby), sa sécurité (ssl), son développement actif et sa relative simplicité à mettre en oeuvre.
\\
{{:administration:puppet.png|}}

<note tip>Il existe une version Legacy (0.25.x) qui comporte de nombreux bugs et manque de fonctionnalités l'article ci dessous ne traite que de la version stable 2.6.x et supérieure</note>

===== Prérequis =====
  * Disposez de plusieurs serveurs à administrer sans quoi le gain de temps et d'énergie ne sera pas effectif.
  * Notions en administration système.

===== Systèmes supportés =====
Puppet fonctionne sur la plupart des système Uni* et dans une moindre mesure Windows. voir [[http://www.puppetlabs.com/puppet/requirements/|ici]] pour plus de détails.

===== Installation =====
Puppet est présent dans les dépôts, installez les paquets puppet, facter et puppetmaster (pour le serveur maître) :
  * Sur le client
<code>apt-get install puppet</code>
  * Sur le master
<code>apt-get install puppetmaster</code>
Cependant si vous souhaitez une version différente rendez vous sur la page de téléchargement [[http://www.puppetlabs.com/misc/download-options/|officielle]] pour obtenir un package .tar.gz. Autre solution installer puppet sous forme de [[http://puppetlabs.com/downloads/gems/|gem]] (le système de paquet ruby). Dans ce cas l'installation est tout aussi simple :
<code>gem install facter
gem install puppet</code>

===== Configuration =====

==== Maître ====
=== Fichiers de configuration ===
<note tip>Les fichiers de configuration sont donnés à titre d'exemple vous êtes libre d'indiquer d'autres paramètres.</note>

On modifie le fichier /etc/puppet/puppet.conf
<file>
[main]
logdir =        /var/log/puppet
vardir =        /var/lib/puppet
ssldir =        $vardir/ssl
rundir =        /var/run/puppet
confdir =       $vardir
factpath =      $vardir/lib/facter
pluginsync =    false
server =        hostnameduserveur
report =        true
reports =       log,store

[master]
templatedir =   $vardir/templates
modulepath =    $vardir/modules
libdir  =       $vardir/plugins
syslogfacility = user
</file>

=== Parefeu ===
On modifie également notre firewall afin de laissez passer les flux :
<code>
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -s ipdumaster --sport 8140 -d ipduclient -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -s ipduclient -d ipdumaster --dport 8140 -j ACCEPT
</code>

==== Esclave ====

=== Configuration de l'agent Puppet ===
/etc/puppet/puppet.conf
<file>
[main]
server =        CEY00026
report =        true
rundir =        /var/run/puppet/
runinterval =   50

[agent]
listen=true
</file>

Le paramètre **listen** et les fichiers auth.conf et namespaceauth.conf sont nécéssaire pour activer le déploiement à partir du master (**puppet kick** ou **puppetrun**) si vous ne souhaitez pas utiliser ces commandes, ces fichier sont inutiles.

/etc/puppet/auth.conf
<file>
path /run
method save
allow *
</file>

/etc/puppet/namespaceauth.conf
<file>[puppetrunner]
allow *
[puppetbucket]
allow *
[puppetreports]
allow *
[resource]
allow *
[kick]
allow *
</file>

=== Parefeu ===
Si vous disposez d'un parefeu d'activer il faut songer à ouvrir le port 8139 :
<code>
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -s ipduclient --sport 8139 -d ipdumaster -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -s ipdumaster -d ipduclient --dport 8139 -j ACCEPT
</code>

===== Validation =====
Avant de pouvoir utilisez un client il faut préalablement le valider auprès du master. Pour cela sur le client lancer la commande :
<code>puppetd --test</code>
Cela va générer un certificat que l'on nous demanderas de valider, pour cela sur le serveur :
<code>puppetca --list
nomduclient
</code>
doit nous retourner le nom du serveur en attente de validation ensuite on signe le certificat en attente :
<code>puppetca --sign nomduclient</code>

===== Déploiement à partir du master =====
Pour lancer le **puppetd --test** sans devoir être connecté à chaque client on lance
<code>puppet kick nomduclient</code>
ou encore
<code>puppetrun nomduclient</code>
Si cela ne fonctionne vérifiez bien qu'un déploiement sur le client est fonctionnel ainsi que l'ouverture des ports dans lle firewall

===== Problèmes =====
==== Désactivez le déploiement automatique d'un client ====
Un client **puppetd** qui tourne en daemon à la fâcheuse tendance d'être configuré pour exécuter un //**puppetd --test**// à intervalle régulier. Pour solutionner ce problème tout en gardant un démon à l'écoute du **puppetrun** du master il faut lancer le process **puppetd** avec l'option **--no-client** soit :
<code>puppetd --no-client</code> pour automatiser l'ensemble on pourra le rajouter dans le fichier /etc/init.d/puppet

===== Liens =====
  * [[http://www.puppetlabs.com/|Site officiel]]
  * [[http://docs.puppetlabs.com/|Documentation officielle]]
  * [[http://puppetlabs.com/downloads/gems/|Dépôt de gems]]
  * [[http://fr.wikipedia.org/wiki/Puppet_%28outil%29|Fiche sur Wikipédia]]